home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / oricon / source / main.asm < prev    next >
Encoding:
Assembly Source File  |  1991-10-19  |  6.8 KB  |  413 lines

  1.         .286
  2. _TEXT        SEGMENT  WORD PUBLIC 'CODE'
  3. _TEXT        ENDS
  4. _DATA        SEGMENT  WORD PUBLIC 'DATA'
  5. _DATA        ENDS
  6. CONST        SEGMENT  WORD PUBLIC 'CONST'
  7. CONST        ENDS
  8. _BSS        SEGMENT  WORD PUBLIC 'BSS'
  9. _BSS        ENDS
  10. _INST        SEGMENT  WORD PUBLIC 'INST'
  11. _INST        ENDS
  12.  
  13. DGROUP        GROUP    _TEXT, CONST, _BSS, _DATA, _INST
  14.  
  15. extrn        _setbios:near
  16. extrn        _resetbios:near
  17. extrn        His_init:near
  18. extrn        His_end:near
  19. extrn        _VDB_00:near
  20. extrn        _cflush:near
  21. extrn       oak_set:near
  22. extrn       oak_reset:near
  23.  
  24. _DATA        segment
  25.  
  26. Exe_Param    dw    ?            ; Envp Seg    +0
  27.         dw    ?            ; para offset    +2
  28.         dw    ?            ;      seg    +4
  29.         dw    offset DGROUP:Exe_fcb1    ; FCB1 offset    +6
  30.         dw    ?            ;      seg    +8
  31.         dw    offset DGROUP:Exe_fcb2    ; FCB2 offset    +10
  32.         dw    ?            ;      seg    +12
  33.  
  34. Exe_fcb1    db    16 dup (0)
  35. Exe_fcb2    db    16 dup (0)
  36.  
  37. Command        db    'C:\COMMAND.COM'
  38.         db    128 dup (0)
  39. Def_Param    db    0,0Dh
  40.  
  41. _DATA        ends
  42.  
  43. _TEXT        segment
  44.         ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
  45.  
  46.         org    02ch
  47. EnvSeg        label    word
  48.  
  49.         org    080h
  50. CmdsLine    label    word
  51.  
  52.         org    100h
  53. entry:        jmp    main
  54.  
  55. _TEXT        ends
  56.  
  57. _INST        segment
  58.         ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
  59.  
  60. main        proc    near
  61.         mov    ax,cs
  62.         mov    ds,ax
  63.         mov    es,ax
  64.         cld
  65.  
  66.         call    Screen_init
  67.         call    _setbios
  68.         call    oak_set
  69.         call    His_init
  70.         call    Path_init
  71.         call    PF_key_init
  72.  
  73.         mov    sp,offset DGROUP:Local_Stack
  74.  
  75.         mov    ax,cs
  76.         mov    es,ax
  77.         mov    bx,offset DGROUP:End_of_Prog
  78.         add    bx,15
  79.         shr    bx,4
  80.         mov    ah,4Ah
  81.         int    21h
  82.  
  83.         mov    di,offset DGROUP:Exe_Param
  84.         mov    ax,EnvSeg
  85.         mov    [di+0],ax
  86.  
  87.         mov    ax,ds
  88.         mov    [di+4],ax
  89.         mov    [di+8],ax
  90.         mov    [di+12],ax
  91.  
  92.         mov    si,offset DGROUP:CmdsLine
  93.         lodsb
  94.         cmp    al,0
  95.         je    Def_Fork
  96.         mov    ah,al
  97.  
  98. main_1:        cmp    ah,0
  99.         je    Def_Fork
  100.         dec    ah
  101.         lodsb
  102.         cmp    al,0Dh
  103.         je    Def_Fork
  104.         cmp    al,' '
  105.         je    main_1
  106.         cmp    al,09h
  107.         je    main_1
  108.  
  109.         mov    bx,offset DGROUP:Command
  110.         jmp    main_5
  111.  
  112. main_2:        cmp    ah,0
  113.         je    main_4
  114.         dec    ah
  115.         lodsb
  116.         cmp    al,0Dh
  117.         je    main_4
  118.         cmp    al,' '
  119.         je    main_3
  120.         cmp    al,09h
  121.         je    main_3
  122. main_5:        mov    [bx],al
  123.         inc    bx
  124.         jmp    short main_2
  125.  
  126. main_3:        dec    si
  127.         mov    [si],ah
  128.         mov    [di+2],si
  129.         mov    byte ptr [bx],0
  130.         jmp    short Com_Fork
  131.  
  132. main_4:        mov    byte ptr [bx],0
  133. Def_Fork:    mov    word ptr [di+2],offset DGROUP:Def_Param
  134.  
  135. Com_Fork:    push    ds
  136.         pop    es
  137.         mov    si,[di+2]
  138.         mov    di,offset DGROUP:Exe_fcb1
  139.         mov    ax,2901h
  140.         int    21h
  141.         mov    di,offset DGROUP:Exe_fcb2
  142.         mov    ax,2901h
  143.         int    21h
  144.  
  145.         mov    dx,offset DGROUP:Command
  146.         mov    bx,offset DGROUP:Exe_Param
  147.         mov    ax,4B00h
  148.         int    21h
  149.  
  150.         call    His_end
  151.         call    _resetbios
  152.         call    oak_reset
  153.  
  154.         mov    ax,4C00h        ; End of Oricon
  155.         int    21h
  156.  
  157. main        endp
  158.  
  159.         db    256 dup (?)
  160. Local_Stack    label    word
  161.         public    End_of_Prog
  162. End_of_Prog    label    word
  163.  
  164. Pal_Tbl        db    000h,000h,000h
  165.         db    0B0h,000h,000h
  166.         db    000h,0B0h,000h
  167.         db    0B0h,0B0h,000h
  168.         db    000h,000h,0B0h
  169.         db    0B0h,000h,0B0h
  170.         db    000h,0B0h,0B0h
  171.         db    0B0h,0B0h,0B0h
  172.         db    0B0h,0B0h,0B0h
  173.         db    0F0h,000h,000h
  174.         db    000h,0F0h,000h
  175.         db    0F0h,0F0h,000h
  176.         db    000h,000h,0F0h
  177.         db    0F0h,000h,0F0h
  178.         db    000h,0F0h,0F0h
  179.         db    0F0h,0F0h,0F0h
  180.  
  181. CRT_Reg_Tbl    dw    0040h,0320h,0000h,0000h
  182.         dw    035Fh,0000h,0010h,0000h
  183.         dw    036Fh,009Ch,031Ch,009Ch
  184.         dw    031Ch,0040h,0360h,0040h
  185.         dw    0360h,0000h,009Ch,0000h
  186.         dw    0050h,0000h,009Ch,0000h
  187.         dw    0050h,004Ah,0001h,0000h
  188.         dw    003Fh,0003h,0000h,0150h
  189.  
  190. Palet_init    proc    near
  191.         sub    cl,cl
  192.         mov    si,offset DGROUP:Pal_Tbl
  193. Pal_init_1:    mov    al,cl
  194.         mov    dx,0FD90h
  195.         out    dx,al
  196.         lodsb
  197.         mov    dx,0FD92h
  198.         out    dx,al
  199.         lodsb
  200.         mov    dx,0FD94h
  201.         out    dx,al
  202.         lodsb
  203.         mov    dx,0FD96h
  204.         out    dx,al
  205.         inc    cl
  206.         cmp    cl,16
  207.         jb    Pal_init_1
  208.         ret    
  209. Palet_init    endp
  210.  
  211. ;
  212. ; SI = Data Address
  213. ;
  214. CRTC_set    proc    near
  215.         sub    cl,cl
  216. CRTC_set_1:    mov    al,cl
  217.         mov    dx,0440h
  218.         out    dx, al
  219.         lodsw
  220.         mov    dx,0442h
  221.         out    dx, ax
  222.         inc    cl
  223.         cmp    cl,32
  224.         jb    CRTC_set_1
  225.         ret    
  226. CRTC_set    endp
  227.  
  228. ;
  229. ; AL = Val
  230. ;
  231. CRTC_onoff    proc    near
  232.         push    ax
  233.         mov    al,01Ch
  234.         mov    dx,0440h
  235.         out    dx,al
  236.         pop    ax
  237.         mov    dx,0443h
  238.         out    dx,al
  239.         ret
  240. CRTC_onoff    endp
  241.  
  242. ;
  243. ; SI = Data Address
  244. ;
  245. CRTC_init    proc    near
  246.         mov    al,0
  247.         call    CRTC_onoff
  248.         call    CRTC_set
  249.         mov    al,byte ptr [CRT_Reg_Tbl+01Ch*2]
  250.         or    al,80h
  251.         call    CRTC_onoff
  252.         ret
  253. CRTC_init    endp
  254.  
  255. ;
  256. ; AX = Val
  257. ;
  258. Video_init    proc    near
  259.         push    ax
  260.         mov    al,0
  261.         mov    dx,0448h
  262.         out    dx,al
  263.         pop    ax
  264.         mov    dx,044Ah
  265.         out    dx,al
  266.  
  267.         mov    al,1
  268.         mov    dx,0448h
  269.         out    dx,al
  270.         mov    al,ah
  271.         mov    dx,044Ah
  272.         out    dx,al
  273.         ret
  274. Video_init    endp
  275.  
  276. Screen_init    proc    near
  277.  
  278.         mov    al,0
  279.         mov    dx,0FDA0h
  280.         out    dx,al
  281.  
  282.         mov    si,offset DGROUP:CRT_Reg_Tbl
  283.         call    CRTC_init
  284.  
  285.         mov    ax,0815h
  286.         call    Video_init
  287.  
  288.         call    Palet_init
  289.         call    _VDB_00
  290.         call    _cflush
  291.  
  292.         mov    al,0Fh
  293.         mov    dx,0FDA0h
  294.         out    dx,al
  295.         ret
  296. Screen_init    endp
  297.  
  298. pf_key_tbl    db    01h,80h, 2,1Bh,'S'    ;PF1
  299.         db    02h,80h, 2,1Bh,'T'    ;PF2
  300.         db    03h,80h, 2,1Bh,'U'    ;PF3
  301.         db    04h,80h, 2,1Bh,'V'    ;PF4
  302.         db    05h,80h, 2,1Bh,'W'    ;PF5
  303.         db    06h,80h, 2,1Bh,'E'    ;PF6
  304.         db    07h,80h, 2,1Bh,'J'    ;PF7
  305.         db    08h,80h, 2,1Bh,'P'    ;PF8
  306.         db    09h,80h, 2,1Bh,'Q'    ;PF9
  307.         db    0ah,80h, 2,1Bh,'Z'    ;PF10
  308.  
  309.         db    0bh,80h, 2,1Bh,'S'    ;PF11
  310.         db    1dh,80h, 2,1Bh,'T'    ;PF12
  311.         db    21h,80h, 2,1Bh,'U'    ;PF13
  312.         db    22h,80h, 2,1Bh,'V'    ;PF14
  313.         db    23h,80h, 2,1Bh,'W'    ;PF15
  314.         db    24h,80h, 2,1Bh,'E'    ;PF16
  315.         db    25h,80h, 2,1Bh,'J'    ;PF17
  316.         db    26h,80h, 2,1Bh,'P'    ;PF18
  317.         db    27h,80h, 2,1Bh,'Q'    ;PF19
  318.         db    28h,80h, 2,1Bh,'Z'    ;PF20
  319.  
  320.         db    12h,00h, 2,1Bh,'P'    ;[INS]
  321.         db    7fh,00h, 2,1Bh,'V'    ;[DEL]
  322.         db    18h,80h, 0        ;[半角/全角]
  323.         db    1ch,80h, 0        ;[かな漢字]
  324.         db    0,0
  325.  
  326. Start_msg    db    'FM-Towns FMR50 コンソ-ルシュミレ-タ v1.09'
  327.         db    0Dh,0Ah
  328.         db    'Programmed by K.MIYAZAKI'
  329.         db    0Dh,0Ah
  330.         db    'Asistant programmer N.YAMAZAKI'
  331.         db    0Dh,0Ah
  332.         db    0Dh,0Ah
  333.         db    'FM-Towns OAK/2 フロントエンドプロセッサー v1.04a'
  334.         db    0Dh,0Ah
  335.         db    'Programmed by N.YAMAZAKI'
  336.         db    0Dh,0Ah
  337.         db    'Investigated by K.MIYAZAKI Thanks a lot.'
  338.         db    0Dh,0Ah
  339.         db    '$'
  340.  
  341. PF_key_init    proc    near
  342.         mov    di,offset DGROUP:pf_key_tbl
  343.         xor    cx,cx
  344. key_set:    mov    dx,word ptr [di]
  345.         cmp    dx,0
  346.         je    key_st_e
  347.         add    di,2
  348.         mov    cl,[di]
  349.         inc    di
  350.         mov    ax,0E00h
  351.         int    90h
  352.         add    di,cx
  353.         jmp    key_set
  354.  
  355. key_st_e:    mov    dx,offset DGROUP:Start_Msg
  356.         mov    ah,09h
  357.         int    21h
  358.         ret
  359. PF_key_init    endp
  360.  
  361. extrn        _path_top:near
  362.  
  363. Path_init    proc    near
  364.         ASSUME DS: nothing, ES: DGROUP
  365.  
  366.         push    ds
  367.         push    es
  368.  
  369.         mov    ax,ds
  370.         mov    es,ax
  371.  
  372.         mov    ds,es:[EnvSeg]
  373.         mov    si,0
  374.         mov    di,offset DGROUP:_path_top
  375.  
  376. _Path_1:    cmp    byte ptr ds:[si],0
  377.         je    _Path_4
  378.  
  379.         mov    ax,ds:[si]
  380.         and    ax,0DFDFh
  381.         cmp    ax,'A'*256+'P'
  382.         jne    _Path_3
  383.         mov    ax,ds:[si+2]
  384.         and    ax,0DFDFh
  385.         cmp    ax,'H'*256+'T'
  386.         jne    _Path_3
  387.         cmp    byte ptr ds:[si+4],'='
  388.         jne    _Path_3
  389.  
  390.         add    si,5
  391. _Path_2:    cmp    byte ptr ds:[si],0
  392.         je    _Path_4
  393.         cmp    di,offset DGROUP:_path_top+127
  394.         jnb    _Path_4
  395.         movsb
  396.         jmp    _Path_2
  397.  
  398. _Path_3:    lodsb
  399.         cmp    al,0
  400.         jne    _Path_3
  401.         jmp    _Path_1
  402.  
  403. _Path_4:    mov    byte ptr es:[di],0
  404.         pop    es
  405.         pop    ds
  406.         ret
  407.         ASSUME DS: DGROUP, ES: nothing
  408.  
  409. Path_init    endp
  410.  
  411. _INST        ends
  412.         end    entry
  413.